$NG.AllReady(function (page, { useValuesChange,useClick,useDataIndexChange,useUpdateRows,useUpdateRow }) {
    const mstform = $NG.getCmpApi("p_form_std_itemdata_req")
    const dgrid = $NG.getCmpApi("p_form_std_itemdata_req_d1")
    const toolbar_dgrid = $NG.getCmpApi("toolbar_p_form_std_itemdata_req_d1")
    if(page.oType == 'add'){
        const param = parseUrlParams(location.href)
        // console.log(param);
        if(param.status == 'ToMaterial'){
            // 读取本地存储
            const _map = JSON.parse(localStorage.getItem("material_apply_data"))
            // console.log(`_map`,_map);
            // 检查日期是否过长
            const endTime = 1000*30
            if((new Date() - _map.time) < endTime){
                //将数据全部放到明细
                const data = _map.data.reduce((value,item)=>{
                    value.push({
                        u_item_name:item.itemname,
                        u_msunit:item.msunit,
                        u_msunit_EXName:item.msunit_EXName,
                        u_resbs:item.category,
                        u_resbs_EXName:item.category_EXName,
                        u_spec:item.spec,
                        u_source_table:item.tableName,
                        u_source_phid:item.source,
                    })
                    return value
                },[])
                // console.log(`增行数据`,data);
                dgrid.addRows([...data])
            } else {
              // 确认提示框
                $NG.confirm(`当前页面为下推数据新增，当前刷新时检查数据已过期，请重新下推！`).then(function (result) {
                  $NG.close()
              });
            }
        }
    }
     // 解析参数
     function parseUrlParams(url) {
        const paramsObj = {};
        const queryString = url.split('?')[1];
        const paramPairs = queryString.split('&');
        paramPairs.forEach((paramPair) => {
            const [key, value] = paramPair.split('=');
            const decodedValue = decodeURIComponent(value);
            paramsObj[key] = decodedValue;
        });
        return paramsObj;
    }
    //去重
  function removeDuplicatesByKeys(arr) {
    const uniqueMap = new Map();
    for (const obj of arr) {
      // 生成一个由 ItemName、PhidResbs 和 PhidMsunit 组合而成的唯一键
      const key = `${obj.ItemName}-${obj.Spec}-${obj.PhidMsunit}`;
      if (!uniqueMap.has(key)) {
        // 如果该键还未存在于 Map 中，则将对象存入
        uniqueMap.set(key, obj);
      }
    }
    // 将 Map 中的值（即去重后的对象）提取到一个新数组中
    return Array.from(uniqueMap.values());
  }
    //匹配物料主请求
  async function getWlRequest(list) {
    const response = await fetch("http://nginx.clouddev.hisense.com/sd/interior/createResourceFileSync", {
      method: "POST",
      headers: {
        "Content-Type": "application/json", // 设置请求头
      },
      body: JSON.stringify(list),
    });
    const res = await response.json();
    // console.log(`请求数据`, res);
    if (res.IsOk) {
      //新增成功
      user_match(); //重新匹配
      [1,2].forEach((item)=>{
        $NG.message(`正在重新匹配，请勿操作等待提示完成！！！%`);
      })
      timeMax = setTimeout(()=>{
        $NG.alert("匹配超时！！！")
    },1000*90)
      $NG.alert("匹配完成！ 100%");
      dgrid.refreshView()
      clearTimeout(timeMax)
    } else {
      if (res.data == "批量新增失败，入参为空！") {
        $NG.alert("匹配完成，入参为空！");
      dgrid.refreshView()
      } else {
        $NG.alert("匹配错误！");
      dgrid.refreshView()
      }
    }
  }
      // 增加匹配物料
      toolbar_dgrid.insert({
        id: "user_match",
        text: "匹配物料",
        iconCls: "icon-InsertRow",
      });
      let setILock = 0
      useClick(async ()=>{
        if(setILock) return
        window.list = []
        window.startNum = 0
        window.endNum = 0
        // 检查是否包含已有物料
        $NG.message(`正在匹配，请勿操作等待提示完成！！！%`);
        user_match()
        setILock = setInterval(()=>{
            if(window.start == window.end){
                // 开始推送
                // console.log(`数据准备完毕开始推送~`,window.list);
                //再次检查物料存在与否
                const inIs = isIn()
                if(inIs.length != 0){
                    $NG.alert(`当前明细包含已存在物料，请先删除！提示：第 ${inIs.join("、")} 行`)
                    clearInterval(setILock)
                    setILock = 0
                    return 
            }
                //去重开始
                const finalData = removeDuplicatesByKeys(window.list)
                clearInterval(setILock)
                getWlRequest(finalData)
                setILock = 0
            } else {
                $NG.message(`正在匹配中，请耐心等待。  ${((window.startNum/(dgrid.getRows().length*3)).toFixed(4))*100}%`);
                window.endNum = window.startNum
            }
        },1000)
      },"user_match")

      //匹配物料逻逻辑
      function user_match() {
        // console.log(`开始咯！！`);
			const _arr = dgrid.getRows();
			_arr.forEach((item) => {
				if (item.u_item) {
					$NG.execServer(
						"getItemdataByPhid",
						{ phid: item.u_item },
						(res) => {
                            window.startNum+=1
							if (res.count > 0) {
								const _data = JSON.parse(res.data)[0].extendObjects;
                                item.u_item_name=_data.itemname
								item.u_resbs = _data.phid_resbs;
								item.u_resbs_EXName = _data.name;
								item.u_msunit = _data.msunit_phid;
								item.u_msunit_EXName = _data.msunit_name;
								item.u_spec = _data.spec;
                                item.in = true
                                dgrid.refreshView()
							}
						}
					);
				} else if (
					(item.u_item_name ? String(item.u_item_name).trim : null) &&
					(item.u_resbs ? String(item.u_resbs).trim : null) &&
					(item.u_msunit ? String(item.u_msunit).trim : null) &&
					(item.u_spec ? String(item.u_spec).trim : null)
				) {
                    //换查找方式继续查询物料
					$NG.execServer(
						"getItemDataByName",
						{
							itemname: `'${item.u_item_name}'`,
							spec: `'${item.u_spec}'`,
							msunit: `'${item.u_msunit}'`,
						},
						(res1) => {
                            window.startNum+=1
							if (res1.count > 0) {
                                const _item = JSON.parse(res1.data)[0].extendObjects
                                item.u_item = _item.phid;
                                item.u_item_EXName = _item.itemno;
                                item.in = true
							} else {
                                // 查找相应资源类型
								$NG.execServer(
									"getResBsByphid",
									{ phid: item.u_resbs },
									(res2) => {
                                        window.startNum+=1
                                        if (res2.count > 0) {
											const el = JSON.parse(res2.data)[0].extendObjects;
											//物料不存在，预备数据
											window.list.push({
												ItemName: item.u_item_name,
												PhidResbs: item.u_resbs,
												PhidMsunit: item.u_msunit,
												Spec: item.u_spec,
												ResBsCode: item.u_resbs,
												ResourceType: el.resource_type,
											});
										}
									}
								);
							}
						}
					);
				}
			});
		}

        //检查是否包含存在的物料明细
        function isIn() {
            const  arr = []
            dgrid.getRows().forEach((item,index)=>{
                if(item.u_item||item.in){
                    arr.push(index+1)
                }
            })
            dgrid.refreshView()
            return arr
        }
})